The present invention relates to methods and apparatus for managing processor tasks in a multi-processing system distributed over a network and, in particular, for scheduling and executing the processor tasks over a network among the sub-processing units of the multi-processing systems on a substantially self-governing basis.
Real-time, multimedia applications are becoming increasingly important. These applications require extremely fast processing speeds, such as many thousands of megabits of data per second. While single processing units are capable of fast processing speeds, they cannot generally match the processing speeds of multi-processor architectures. Indeed, in multi-processor systems, a plurality of sub-processors can operate in parallel (or at least in concert) to achieve desired processing results.
Moreover, multi-processor architectures are of valuable but limited scalability. Larger scales of efficiency can be achieved by grouping multiple multi-processor systems together over a network for distributed processing at speeds exceeding those of each multi-processor system running alone.
The types of computers and computing devices that may employ multi-processing techniques are extensive. In addition to personal computers (PCs) and servers, these computing devices include cellular, telephones, mobile computers, personal digital assistants (PDAs), set top boxes, digital televisions and many others.
Real-time, multimedia software applications are constructed of processing code, such as processing instructions and data. A collection of at least some of the processing instructions and/or the processing data may be referred to as a processor task. While the program statements within a processor task may be executed sequentially, different processor tasks may be executed in parallel on different processors in a multi-processor system, or may be distributed among different multi-processor systems on a network. Thus, the software applications may be considered to contain processor tasks to be executed by the multi-processing system.
A design concern in a multi-processing system is how to manage which sub-processing units of the system execute which processor tasks, and how to manage distribution of processor tasks among multi-processor systems on a network. In some multi-processing systems, the processor tasks specify which of the sub-processing units are to perform the execution. A drawback to this approach is that the programmer may not have optimized the allocation of processor tasks among the sub-processing units. For example, one or more processor tasks may specify the same sub-processing unit at the same time. This dictates that some of the processor tasks be put on hold until the specified sub-processing unit becomes available, thereby delaying their execution. Unfortunately, this also results in an unpredictable latency as to the execution of the processor tasks.
Other systems contemplate that a managing element communicates with the sub-processing units and schedules the processor tasks among them. A communication protocol must therefore be in place to facilitate such communication. Unfortunately, communication protocols often result in message delays between the managing element and the sub-processing units. Indeed, such protocols may require the use of a memory mapped I/O space (using memory mapped registers), which are generally slow. Further, the managing elements (which may themselves be processors of the system) may employ multiple partition domains, which may require significant time to change (e.g., 700 s). These characteristics also delay execution of the processor tasks and result in unpredictable latencies. Thus, overall processor throughput and efficiency of the multi-processing system are sacrificed, which may result in significant impact on the real-time and/or multimedia experience of a user of the system.
Therefore, there are needs in the art for new methods and apparatus for achieving efficient distributed processing of processor tasks among multi-processor systems on a network.